import Vue from 'vue'
import axios from 'axios'
import qs from 'qs'
import {
	Message
} from 'element-ui'

// 要instance
// 基准路径
var instance = axios.create({
	baseURL: "http://127.0.0.1:80"
	// baseURL: "" //打包用
})

// 请求拦截 : 有这个请求拦截，其他的请求都不用带token
instance.interceptors.request.use(
	config => {
		let token = window.localStorage.getItem('token');
		console.log("每次请求前读取 Token=" + token)
		if (token) {
			config.headers.Authorization = "Bearer " + token;
		}
		return config;
	},
	error => {
		return Promise.reject(error);
	}
);


// 响应拦截
instance.interceptors.response.use(
// 第一个参数是一个 匿名函数作为参数变量,正常响应HTTP状态码200
response =>{
	console.log("正常响应HTTP状态码:"+response.status);
	// resp.data.code !=0 做判断
	return response;
},
// 第二个参数是一个 匿名函数 ,出错了，非正常响应码
error =>{
	if(error.response){//如果springboot 没有启动， 就没有这个
		switch(error.response.status){
			case 401:
			Message.error("401账号或密码错误...");
			break;
			
			case 403:
			Message.error("403没有权限...");
			break;
			
			default:
			Message.error(error.response.status+"系统在建设中...");
			break;
		}
	}
	return Promise.reject(error.response.data)//继续往下执行
}
)


// 集成
// 有四种方式提交 get post+kv post+File post+json

// get封装支持两种写法
// 请求路径url  /api/adm/clz/findById?id=100  $get("/api/adm/clz/findById?id=100")
// 请求路径url  /api/adm/clz/findById  $get("/api/adm/clz/findById",{id:100})
// 参数： 对象格式
// get键值对
export let $get = (url, obj) => {
	return instance.get(url, {
		parms: obj
	})
};

// post键值对  x-www-formed
// 请求路径url ，obj是对象
// $postkv("/login",{username:'12111',password:'45'})
export let $postkv = (url, obj) => {
	let head = {
		"headers": {
			'Content-Type': 'application/x-www-form-urlencoded;charset=utf8'
		}
	}
	let kv = qs.stringify(obj) // 转成键值对
	return instance.post(url, kv, head)
};


// post文件 file文件上传
// 请求路径url ，formdata是对象
// $postf("/api/user/updatePic",formdata)
export let $postf = (url, formdata) => {
	let token = window.localStorage.getItem("token")
	token = "Bearer " + token;
	let head = {
		"headers": {
			'Authorization': token,
			'Content-Type': 'multipart/form-data'
		}
	}
	return instance.post(url, formdata, head)
}

// post Json 对象或数组   application/json
export let $postj = (url, obj) => {
	let token = window.localStorage.getItem("token")
	token = "Bearer " + token;
	let head = {
		"headers": {
			'Authorization': token,
			'Content-Type': 'application/json;chartset=utf8'
		}
	}
	return instance.post(url, obj, head)
}
